REM >Director:Menus.System.DoWin
REM Modified by Harriet Bazley 2 Aug 2001 to work with RISC OS 3.1
REM and when called directly from Switch menu
REM as well as when invoked from Close icon filter
DIM block 255

ON ERROR: ON ERROR OFF: ERROR ERR,REPORT$+" at "+STR$ ERL

SYS "OS_GetEnv" TO in$
SYS"OS_ReadArgs","Basic,quit/A/K,DoWin,opt/A/K,window/k",in$,block,160
opt$=FNs(block!12)
window%=EVAL(FNs(block!16))

SYS "Wimp_Initialise",200,&4B534154,"Temp" TO ,handle%
dir$=FNgetwindowtitle(window%)
!block=window%
SYS "Wimp_GetWindowOutline",,block
x0=block!4
y1=block!16

SYS "XWimp_ReadSysInfo",9 TO area% ;f
IF (f AND 1) THEN
 h = 21
 REM assume this value under RISC OS 3.1 - no reliable way of telling
ELSE
 SYS "XOS_SpriteOp",&128,area%,"ticon22" TO ,,,,h ; f
 IF (f AND 1) h = 21
ENDIF
OSCLI"Filer_CloseDir "+dir$
OSCLI"Filer_OpenDir "+dir$+" "+opt$+" -X0 "+STR$(x0+2)+" -Y1 "+STR$(y1-h*2)
SYS "Wimp_CloseDown",handle%,&4B534154
END

DEF FNread(a$)
  ?block=13
  SYS "XOS_ReadVarVal",a$,block,32,0,3 TO ,,read%
  block?read%=13
=$block

DEF FNs(a)
LOCAL a$
WHILE ?a>31
a$=a$+CHR$(?a)
a=a+1
ENDWHILE
=a$
DEF FNgetwindowtitle(win%)
LOCAL s$
task_handle%=FNgettaskhandle(win%)

  block!0=win%
  SYS "Wimp_GetWindowInfo",,block OR 1

    REM obtain window title
    a%=(block!60) AND &100: REM title direct/indirect ?

    IF a% THEN
      SYS "Wimp_TransferBlock",task_handle%,block!76,handle%,block,256
      s$ = FNs(block)
    ELSE
      s$ = FNs(block+76)
    ENDIF
=s$
:
DEF FNgettaskhandle(win%)
LOCAL task%
REM what task does it belong to ?
block!0 = 20
block!4 = handle%
block!8 = 0
block!12 = 0
block!16 = 0
SYS "Wimp_SendMessage",19,block,win%,0 TO ,,task%

=task%
